package br.com.beautycenter.view;

import br.com.beautycenter.Funcionalidades.Bean;
import br.com.beautycenter.Funcionalidades.Pesquisas;
import br.com.beautycenter.Funcionalidades.Swing;
import br.com.beautycenter.Funcionalidades.Validacoes;
import br.com.beautycenter.DAO.PersisteCliente;
import br.com.beautycenter.DAO.PersistePrestacao;
import br.com.beautycenter.DAO.PersisteProduto;
import br.com.beautycenter.DAO.PersisteVenda;
import br.com.beautycenter.DAO.PersisteVendasxProdutos;
import br.com.beautycenter.Funcionalidades.Data;
import br.com.beautycenter.bean.Cliente;
import br.com.beautycenter.bean.Prestacao;
import br.com.beautycenter.bean.Produto;
import br.com.beautycenter.bean.Venda;
import br.com.beautycenter.bean.VendasxProdutos;
import java.awt.event.KeyEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import org.joda.time.DateTime;

public class ModuloVendas extends javax.swing.JDialog {
      
    DefaultTableModel modelo;
    
    //Referente a venda
    PersisteVenda persisteVenda = new PersisteVenda();
   
    //Referente a cliente
    PersisteCliente persisteCliente = new PersisteCliente();
    PersistePrestacao persistePrestacao = new PersistePrestacao();
    
    Cliente cliente = new Cliente();
    Cliente clienteTemp = new Cliente();

    List<Cliente> listaClientes = persisteCliente.retornarClientes();
    
    /**
     * Essa lista vão conter os produtos que vão ficar na tabela
     * objeto[0] = descrição do produto
     * objeto[1] = preço
     * objeto[2] = quantidade
     * objeto[3] = desconto
     * objeto[4] = total
     */
    List<Object[]> listaProdutosGrid = new ArrayList<Object[]>();
    
    //Referente a produto    
    PersisteProduto persiteProduto = new PersisteProduto();
    
    Produto produto = new Produto();
    Produto produtoTemp = new Produto();
    
    List<Produto> listaProdutos = persiteProduto.retornarProdutos();
    
    //Referente a venda 
    Venda vendasTemp = new Venda();
    Venda venda = new Venda();
    
    
    //Referente a vendasxprodutos
    PersisteVendasxProdutos persisteVendasxProdutos = new PersisteVendasxProdutos();
    
    VendasxProdutos vendProduto = new VendasxProdutos();
    VendasxProdutos vendProdutoTemp = new VendasxProdutos();
    
    
    int selecao = 0;
    int posicao = -1;
    
    Double totalProdutoBruto;
    Double totalProdutoLiquido;
    Double totalDesconto;
    
    Double totalBrutoVenda;
    Double totalLiquidoVenda;
    Double totalDescontoPorcentagemVenda;
    Double totalDescontoDinheiroVenda;
    
    public ModuloVendas(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        inicializarTela();
    }

    private void inicializarTela() {
        modelo = (DefaultTableModel) jTableProdutosXVendas.getModel();
        preencherComboPrestacao();
        desabilitaCampos();
        desabilitaBotoes();
        limpaCamposCliente();
        limpaCamposProduto();
        zerarTotalizadores();
        txtCliente.requestFocus();
        jDDataPagamento.setDate(new Date());
    }
    
    public void desabilitaCampos(){
        txtCPF.disable();
        txtProduto.disable();
        txtQuantidade.disable();
        txtPreco.disable();
        txtDescontoDinheiro.disable();
        txtDescontoDinheiro.setVisible(false);
        jLabelDescontoDinheiro.setVisible(false);
        txtDescontoPorcentagem.disable();
        txtPrecoTotal.disable();
    }
    
    public void desabilitaBotoes(){
        btnExcluir.setEnabled(false);
        btnLimparVenda.setEnabled(false);
        btnFinalizarVenda.setEnabled(false);
    }
    
    public void habilitaBotoes(){
        btnExcluir.setEnabled(true);
        btnLimparVenda.setEnabled(true);
        btnFinalizarVenda.setEnabled(true);    
    }
    
    public void zerarTotalizadores(){
        jLabelValorTotalBrutoVenda.setText("0.00");
        jLabelValorTotalDescontoVenda.setText("0.00");
        jLabelValorTotalVenda.setText("0.00"); 
    }

    /**
     * Preenche o formulário com os dados do cliente. O parâmetro é a posição do
     * item na lista
     *
     * @param posicao
     */
    public void exibirCliente() {
        limpaCamposCliente();
        cliente = listaClientes.get(posicao);
        txtCliente.setText(cliente.getNome());
        txtCPF.setText(cliente.getCpf());
    }
    
    
    /**
     * Se a tabela estiver vazia deixa o combo desativo. Quando for inserido um produto, automaticamente já preenche o combo
     * com 3 prestações seguindo a linha
     * 
     * 1x de valor
     * 2x de valor
     * 3x de valor
     */
    public void preencherComboPrestacao(){
        
        jComboFormaPagamento.removeAllItems();
        if(jTableProdutosXVendas.getRowCount() == 0) {
            jComboFormaPagamento.setEnabled(false);
            return;
        }else{
            jComboFormaPagamento.setEnabled(true);
        }
        
        //bigdecimal para pegar o número com duas casas decimais
        BigDecimal valor = new BigDecimal(totalLiquidoVenda).setScale(2, RoundingMode.HALF_EVEN);
        
        for(int i=0; i<3; i++){
            BigDecimal divisao = valor.divide(new BigDecimal(i+1), 2, RoundingMode.HALF_EVEN);
            jComboFormaPagamento.addItem(i+1 + "x de " + Validacoes.formatoMoeda.format(divisao.doubleValue()));
        }
    }
    
    public void criarPrestacoes(){
        int numeroPrestacoes = jComboFormaPagamento.getSelectedIndex(); //pega o indice o item selecionado ao clicar no botão
        //pega o valor total de cada prestação
        BigDecimal valor = new BigDecimal(
                Validacoes.validarCampoMoeda(jLabelValorTotalVenda.getText().trim())
        ).setScale(2, RoundingMode.HALF_EVEN);
        
        BigDecimal divisao = valor.divide(new BigDecimal(numeroPrestacoes+1), 2, RoundingMode.HALF_EVEN);
        
        //data base para pagamento
        DateTime dataBase = new DateTime(jDDataPagamento.getDate().getTime());
        
        //percorrerá o for de acordo com a opção escolhida
        for(int i=0; i<numeroPrestacoes+1; i++){
            Prestacao prestacao = new Prestacao();
            prestacao.setIdPrestacao(0); //para evitar que um sobreponha outro
            prestacao.setNumeroPrestacao(i+1); //número da prestação
            prestacao.setValor(divisao.doubleValue()); //valor da prestação
            prestacao.setDataPagamento(new Date(dataBase.getMillis()));
            prestacao.setVenda(venda); //insere a venda na prestação
            
            //insere o valor da prestação como débito no cliente
            cliente.setCredito(cliente.getCredito()-prestacao.getValor());
            
            //se a primeira parcela, seja a venda a vista ou não, for paga no dia corrente, seta a prestação como recebida
            if(i == 0 && Data.compararDatas(dataBase, new DateTime(new Date().getTime()))){
                prestacao.setConfirmarRecebimento(true);
                
                //se a prestação é marca como salva, então retira o débito
                cliente.setCredito(cliente.getCredito()+prestacao.getValor());
            }
            
            persistePrestacao.salvar(prestacao);
            
            dataBase = dataBase.plusMonths(1); //adiciona um mês na data
        }
        
        persisteCliente.atualizar(cliente);
    }
    
    /**
     * Preenche o formulário com os dados do cliente. O parâmetro é a posição do
     * item na lista
     *
     * @param posicao
     */
    public void exibirProduto() {
        limpaCamposProduto();
        
        txtProduto.setText(listaProdutos.get(posicao).getDescricao());
        txtPreco.setText(String.valueOf(listaProdutos.get(posicao).getValorVenda()));
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        jPanelPrincipal = new javax.swing.JPanel();
        jPanelCliente = new javax.swing.JPanel();
        jLabelCliente = new javax.swing.JLabel();
        txtCliente = new javax.swing.JTextField();
        jLabelCPF = new javax.swing.JLabel();
        txtCPF = new javax.swing.JFormattedTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTableProdutosXVendas = new javax.swing.JTable();
        jPanelProduto = new javax.swing.JPanel();
        jLabelProduto = new javax.swing.JLabel();
        txtProduto = new javax.swing.JTextField();
        jLabelQuantidade = new javax.swing.JLabel();
        txtQuantidade = new javax.swing.JTextField();
        jLabelPreco = new javax.swing.JLabel();
        txtPreco = new javax.swing.JTextField();
        jLabelDesconto = new javax.swing.JLabel();
        txtDescontoDinheiro = new javax.swing.JTextField();
        txtDescontoPorcentagem = new javax.swing.JTextField();
        jLabelDescontoDinheiro = new javax.swing.JLabel();
        jLabelDescontoPorcentagem = new javax.swing.JLabel();
        jLabelPrecoTotalProduto = new javax.swing.JLabel();
        txtPrecoTotal = new javax.swing.JTextField();
        btnExcluir = new javax.swing.JButton();
        btnLimparVenda = new javax.swing.JButton();
        btnFinalizarVenda = new javax.swing.JButton();
        jPanelTotalizadores = new javax.swing.JPanel();
        jLabelTotalBrutoVenda = new javax.swing.JLabel();
        jLabelTotalDescontoVenda = new javax.swing.JLabel();
        jLabelValorTotalBrutoVenda = new javax.swing.JLabel();
        jLabelValorTotalDescontoVenda = new javax.swing.JLabel();
        jLabelTotalVenda = new javax.swing.JLabel();
        jLabelValorTotalVenda = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jComboFormaPagamento = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        jDDataPagamento = new com.toedter.calendar.JDateChooser();

        jLabel2.setText("jLabel2");

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ERP BEAUTY CENTER - Modulo Vendas");

        jPanelPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        jPanelPrincipal.setPreferredSize(new java.awt.Dimension(800, 600));

        jLabelCliente.setFont(new java.awt.Font("Verdana", 0, 20)); // NOI18N
        jLabelCliente.setForeground(new java.awt.Color(0, 0, 255));
        jLabelCliente.setText("Cliente:");

        txtCliente.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtClienteKeyPressed(evt);
            }
        });

        jLabelCPF.setFont(new java.awt.Font("Verdana", 0, 20)); // NOI18N
        jLabelCPF.setForeground(new java.awt.Color(0, 0, 255));
        jLabelCPF.setText("CPF:");

        try {
            txtCPF.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("###.###.###-##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        javax.swing.GroupLayout jPanelClienteLayout = new javax.swing.GroupLayout(jPanelCliente);
        jPanelCliente.setLayout(jPanelClienteLayout);
        jPanelClienteLayout.setHorizontalGroup(
            jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelClienteLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelCliente)
                    .addComponent(jLabelCPF))
                .addGap(4, 4, 4)
                .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtCPF, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelClienteLayout.setVerticalGroup(
            jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelClienteLayout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCliente)
                    .addComponent(txtCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCPF)
                    .addComponent(txtCPF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(34, Short.MAX_VALUE))
        );

        jTableProdutosXVendas.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
        jTableProdutosXVendas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Produto", "Preço", "Qtd.", "Desconto", "Total"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTableProdutosXVendas);

        jLabelProduto.setFont(new java.awt.Font("Verdana", 0, 18)); // NOI18N
        jLabelProduto.setForeground(new java.awt.Color(0, 0, 255));
        jLabelProduto.setText("Produto:");

        txtProduto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtProdutoKeyPressed(evt);
            }
        });

        jLabelQuantidade.setFont(new java.awt.Font("Verdana", 0, 18)); // NOI18N
        jLabelQuantidade.setForeground(new java.awt.Color(0, 0, 255));
        jLabelQuantidade.setText("Quantidade:");

        txtQuantidade.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtQuantidadeKeyPressed(evt);
            }
        });

        jLabelPreco.setFont(new java.awt.Font("Verdana", 0, 18)); // NOI18N
        jLabelPreco.setText("Preço:");

        jLabelDesconto.setFont(new java.awt.Font("Verdana", 0, 18)); // NOI18N
        jLabelDesconto.setText("Desconto:");

        txtDescontoPorcentagem.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtDescontoPorcentagemKeyPressed(evt);
            }
        });

        jLabelDescontoDinheiro.setText("R$");

        jLabelDescontoPorcentagem.setText("%");

        jLabelPrecoTotalProduto.setFont(new java.awt.Font("Verdana", 0, 18)); // NOI18N
        jLabelPrecoTotalProduto.setText("Preço Total Produto:");

        javax.swing.GroupLayout jPanelProdutoLayout = new javax.swing.GroupLayout(jPanelProduto);
        jPanelProduto.setLayout(jPanelProdutoLayout);
        jPanelProdutoLayout.setHorizontalGroup(
            jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelProdutoLayout.createSequentialGroup()
                        .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabelDesconto)
                            .addComponent(jLabelQuantidade)
                            .addComponent(jLabelProduto))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                                .addComponent(txtQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelPreco)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtPreco, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                                .addComponent(jLabelDescontoPorcentagem)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtDescontoPorcentagem, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelDescontoDinheiro)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtDescontoDinheiro, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(txtProduto, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(20, 20, 20))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelProdutoLayout.createSequentialGroup()
                        .addComponent(jLabelPrecoTotalProduto)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtPrecoTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanelProdutoLayout.setVerticalGroup(
            jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelProduto)
                    .addComponent(txtProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelQuantidade)
                    .addComponent(txtQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelPreco)
                    .addComponent(txtPreco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelDesconto)
                    .addComponent(txtDescontoPorcentagem, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelDescontoPorcentagem)
                    .addComponent(jLabelDescontoDinheiro)
                    .addComponent(txtDescontoDinheiro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 98, Short.MAX_VALUE)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelPrecoTotalProduto)
                    .addComponent(txtPrecoTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanelProdutoLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {txtPreco, txtQuantidade});

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Excluir.png"))); // NOI18N
        btnExcluir.setText("Excluir Produto");
        btnExcluir.setToolTipText("EXCLUIR");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        btnLimparVenda.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Limpar.png"))); // NOI18N
        btnLimparVenda.setText("Limpar Venda");
        btnLimparVenda.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimparVendaActionPerformed(evt);
            }
        });

        btnFinalizarVenda.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Salvar.png"))); // NOI18N
        btnFinalizarVenda.setText("Finalizar Venda");
        btnFinalizarVenda.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnFinalizarVendaActionPerformed(evt);
            }
        });

        jPanelTotalizadores.setBackground(new java.awt.Color(255, 255, 255));

        jLabelTotalBrutoVenda.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabelTotalBrutoVenda.setForeground(new java.awt.Color(0, 0, 255));
        jLabelTotalBrutoVenda.setText("Total Bruto:");

        jLabelTotalDescontoVenda.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabelTotalDescontoVenda.setForeground(new java.awt.Color(0, 0, 255));
        jLabelTotalDescontoVenda.setText("Desconto:");

        jLabelValorTotalBrutoVenda.setFont(new java.awt.Font("Verdana", 1, 20)); // NOI18N
        jLabelValorTotalBrutoVenda.setText("0.00");

        jLabelValorTotalDescontoVenda.setFont(new java.awt.Font("Verdana", 1, 20)); // NOI18N
        jLabelValorTotalDescontoVenda.setText("0.00");

        jLabelTotalVenda.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabelTotalVenda.setForeground(new java.awt.Color(0, 0, 255));
        jLabelTotalVenda.setText("Total:");

        jLabelValorTotalVenda.setFont(new java.awt.Font("Verdana", 1, 20)); // NOI18N
        jLabelValorTotalVenda.setText("0.00");

        javax.swing.GroupLayout jPanelTotalizadoresLayout = new javax.swing.GroupLayout(jPanelTotalizadores);
        jPanelTotalizadores.setLayout(jPanelTotalizadoresLayout);
        jPanelTotalizadoresLayout.setHorizontalGroup(
            jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelTotalizadoresLayout.createSequentialGroup()
                .addGroup(jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelTotalBrutoVenda)
                    .addComponent(jLabelTotalVenda)
                    .addComponent(jLabelTotalDescontoVenda))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelValorTotalBrutoVenda, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelValorTotalDescontoVenda, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelValorTotalVenda, javax.swing.GroupLayout.Alignment.TRAILING))
                .addGap(55, 55, 55))
        );
        jPanelTotalizadoresLayout.setVerticalGroup(
            jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelTotalizadoresLayout.createSequentialGroup()
                .addGap(0, 35, Short.MAX_VALUE)
                .addGroup(jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelTotalBrutoVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelValorTotalBrutoVenda))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelTotalDescontoVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelValorTotalDescontoVenda))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelTotalizadoresLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelValorTotalVenda)
                    .addComponent(jLabelTotalVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        jPanelTotalizadoresLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jLabelTotalVenda, jLabelValorTotalBrutoVenda, jLabelValorTotalVenda});

        jLabel1.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(0, 0, 255));
        jLabel1.setText("Quantidade de Prestações:");

        jLabel3.setFont(new java.awt.Font("Verdana", 0, 12)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(0, 0, 255));
        jLabel3.setText("Data do Primeiro Pagamento: ");

        javax.swing.GroupLayout jPanelPrincipalLayout = new javax.swing.GroupLayout(jPanelPrincipal);
        jPanelPrincipal.setLayout(jPanelPrincipalLayout);
        jPanelPrincipalLayout.setHorizontalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1)
                    .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                        .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jPanelCliente, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jPanelProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jPanelTotalizadores, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel1)
                                    .addComponent(jLabel3))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jComboFormaPagamento, 0, 173, Short.MAX_VALUE)
                                    .addComponent(jDDataPagamento, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(btnExcluir)
                                    .addComponent(btnLimparVenda))
                                .addGap(40, 40, 40)
                                .addComponent(btnFinalizarVenda)
                                .addGap(0, 0, Short.MAX_VALUE)))))
                .addContainerGap())
        );

        jPanelPrincipalLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnExcluir, btnFinalizarVenda, btnLimparVenda});

        jPanelPrincipalLayout.setVerticalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                        .addComponent(jPanelCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                        .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(jComboFormaPagamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jDDataPagamento, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(89, 89, 89)))
                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanelProduto, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelPrincipalLayout.createSequentialGroup()
                        .addComponent(btnExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(btnLimparVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(btnFinalizarVenda, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanelTotalizadores, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        jPanelPrincipalLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {btnExcluir, btnLimparVenda});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, 625, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void limpaCamposCliente() {
        Swing.zerarCampos(jPanelCliente.getComponents());
    }
    
    public void limpaCamposProduto(){
        Swing.zerarCampos(jPanelProduto.getComponents());
    }

    public boolean validarNome() {
        
        if (!txtCliente.getText().trim().isEmpty()) {
            cliente = new Cliente();
            cliente.setNome(txtCliente.getText().trim());
            listaClientes = persisteCliente.retornarClientePeloNome(cliente);
            return true;
        }else{
            JOptionPane.showMessageDialog(null, "Não foi informado nenhum cliente.");
            txtCliente.requestFocus();
            return false;
        }
    }
    
    public boolean validarProduto(){
        if(!txtProduto.getText().trim().isEmpty()){
            produto = new Produto();
            produto.setDescricao(txtProduto.getText().trim());
            listaProdutos = persiteProduto.retornarProdutoPeloNome(produto);
            return true;
        }else{
            JOptionPane.showMessageDialog(null, "Não foi informado nenhum produto.");
            txtProduto.requestFocus();
            return false;
        }
    }
    
    public boolean validarQuantidadeXEstoque(){
        Double estoque;
        Double quantidade;
        
        quantidade = Double.parseDouble(txtQuantidade.getText().trim());
        estoque = Double.parseDouble(String.valueOf(listaProdutos.get(posicao).getEstoque()));

        if(quantidade <= estoque){
            if(quantidade > 0){
                return true;
            }else{
                JOptionPane.showMessageDialog(null, "A quantidade informada é menor ou igual a 0.");
                txtQuantidade.requestFocus();
                return false;
            }
        }else{
            JOptionPane.showMessageDialog(null, "A quantidade informada é maior que o estoque altual.");
            txtQuantidade.requestFocus();
            
            return false;
        }
        
    }
    
    public boolean validarDescontoDinheiro(){
        if(Double.parseDouble(txtDescontoDinheiro.getText().trim()) 
                <= Double.parseDouble(txtPrecoTotal.getText().trim())){
            
            calcularDescontoDinheiro();
            return true;
            
        }else{
            JOptionPane.showMessageDialog(null, "O valor do desconto aplicado é maior que o valor total da venda.");
            txtDescontoDinheiro.requestFocus();
            return false;
        }
    }
    
    public boolean validarDescontoPorcentagem(){
        String campoDesconto = txtDescontoPorcentagem.getText().trim();
        
        if(!campoDesconto.equals("")){  
            
            if(Double.parseDouble(campoDesconto) <= 100){
            
                if(Double.parseDouble(campoDesconto) >= 0){
                    
                    calcularDescontoPorcentagem();
                    return true;
                    
                }else{
                        JOptionPane.showMessageDialog(null, "O valor do desconto tem que ser maior que zero.");
                        txtDescontoDinheiro.requestFocus();
                        return false;
                }
            }else{
                    JOptionPane.showMessageDialog(null, "O valor do desconto tem que ser menor ou igual a 100.");
                    txtDescontoDinheiro.requestFocus();
                    return false;
            }
            
            
        }else{
            JOptionPane.showMessageDialog(null, "Não foi informado nenhum valor para desconto, caso a venda não possua desconto informe zero no campo desconto");
            txtDescontoDinheiro.requestFocus();
            return false;
        }
    }
      
    public void calcularDescontoDinheiro(){
        Double precoTotalProduto = Double.parseDouble(txtPrecoTotal.getText().trim());
        Double descontoProduto = Double.parseDouble(txtDescontoDinheiro.getText().trim());
        Double desconto;
        
        desconto = (descontoProduto/precoTotalProduto)* 100;
        
        txtDescontoPorcentagem.setText(String.valueOf(desconto));  

    }
    
    public void calcularDescontoPorcentagem(){
        Double precoTotalProduto = Double.parseDouble(txtPrecoTotal.getText().trim());
        Double descontoProduto = Double.parseDouble(txtDescontoPorcentagem.getText().trim());
        Double desconto;
        
        String valorCampo = txtDescontoPorcentagem.getText().trim();
            if(valorCampo == "0"){
                totalDesconto = 0.00;
            }else{
                desconto = (descontoProduto * precoTotalProduto) / 100;
                totalDesconto = desconto;  
            }
               
        totalProdutoLiquido = totalProdutoBruto - totalDesconto;
        
        txtDescontoDinheiro.setText(String.valueOf(totalDesconto));  

        txtPrecoTotal.setText(String.valueOf(totalProdutoLiquido));
        
        txtDescontoPorcentagem.disable();
    }
    
    public void selecionarCliente() {
        int encontrouCliente = Pesquisas.pesquisarNaListaPeloId(
                listaClientes, cliente);

        if (encontrouCliente > -1) {
            posicao = encontrouCliente;
            exibirCliente();
        }
        txtProduto.enable();
        txtProduto.requestFocus();
    }
    
    public void selecionarProduto(){
        int achou = Pesquisas.pesquisarNaListaPeloId(
                listaProdutos, produto);

        if (achou > -1) {
            posicao = achou;
            exibirProduto();
        }
        txtQuantidade.enable();
        txtQuantidade.requestFocus();    
    }
    
    public void selecionarProdutoGrid(){
        int linha = jTableProdutosXVendas.getSelectedRow();
        
        if(linha > -1){   
            
            ((DefaultTableModel) jTableProdutosXVendas.getModel()).removeRow(linha); 
            listaProdutosGrid.remove(linha);
            zerarTotalizadores();
                        
        }else{
            JOptionPane.showMessageDialog(null, "Selecione um produto do grid!");
        }
    }
    
    public void confirmar(){
        btnLimparVenda.enable();
        somaProdutos();
        somaDesconto();
        habilitaBotoes();
        txtCliente.disable();
    }
    
    public void definirFuncoes(){
        switch(selecao){              
            case 0:
                if(validarNome()){      
                    //se ele selecionar algum, então joga para a tela de cadastro de cliente.
                    if(!listaClientes.isEmpty()){
                        //aqui ele vai selecionar o cliente;
                        SelecionarClienteVendas clienteVendas = new SelecionarClienteVendas(this,true);
                        clienteVendas.setLocationRelativeTo(null);
                        clienteVendas.setVisible(true);
                        
                        selecionarCliente();
                    }else{
                        JOptionPane.showMessageDialog(null, "Nenhum cliente foi encontrado com o nome informado.");
                    } 
                }
                break;
                
            case 1:
                if(validarProduto()){
                    if(!listaProdutos.isEmpty()){
                        SelecionarProdutoVendas selecionarProdutoVendas = new SelecionarProdutoVendas(this, true);
                        selecionarProdutoVendas.setLocationRelativeTo(null);
                        selecionarProdutoVendas.setVisible(true);
                    
                        selecionarProduto();
                    }else{
                        JOptionPane.showMessageDialog(null, "Nenhum produto foi encontrado com o nome informado.");
                    }
                }
                break;
          }
    }
    
    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
            selecionarProdutoGrid(); 
            
            DefaultTableModel tabela = (DefaultTableModel)jTableProdutosXVendas.getModel();  
        
            if(tabela.getRowCount() <= 0){
                desabilitaBotoes();
            }  
            txtProduto.requestFocus();
            preencherComboPrestacao();
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void txtClienteKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtClienteKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            selecao = 0;
            definirFuncoes();
        }
    }//GEN-LAST:event_txtClienteKeyPressed

    private void txtProdutoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtProdutoKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            selecao = 1;
            definirFuncoes();
        }
    }//GEN-LAST:event_txtProdutoKeyPressed

    private void txtQuantidadeKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtQuantidadeKeyPressed
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {

            if(validarQuantidadeXEstoque()){
                Double preco;
                Double quantidade;
                Double total;  
            
                preco = Double.parseDouble(txtPreco.getText().trim());
                quantidade = Double.parseDouble(txtQuantidade.getText().trim());
                total = preco * quantidade;
                
                totalProdutoBruto = total;

                total = Double.valueOf(String.format(Locale.US, "%.2f", total));
                txtPrecoTotal.setText(String.valueOf(total));

                txtDescontoPorcentagem.enable();
                
                txtDescontoPorcentagem.requestFocus();
                
            }      
        }
    }//GEN-LAST:event_txtQuantidadeKeyPressed

    private void txtDescontoPorcentagemKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtDescontoPorcentagemKeyPressed
        
        totalProdutoLiquido = Double.valueOf(txtPrecoTotal.getText().trim());
                
        if (evt.getKeyCode() == KeyEvent.VK_ENTER){
            if(validarDescontoPorcentagem()){
                //cria o vetor de objetos com os dados do produto
                Object[] objeto = {
                    listaProdutos.get(posicao).getDescricao(),
                    Validacoes.formatoMoeda.format(listaProdutos.get(posicao).getValorVenda()),
                    txtQuantidade.getText().trim(),
                    txtDescontoPorcentagem.getText().trim() + "%",
                    totalProdutoLiquido = Double.valueOf(String.format(Locale.US, "%.2f", totalProdutoLiquido))                       
                };
                
                //insere na lista
                listaProdutosGrid.add(objeto);
                preencherTabela();
                Swing.zerarCampos(jPanelProduto.getComponents());
                confirmar();
                txtProduto.requestFocus();
            }
        }
    }//GEN-LAST:event_txtDescontoPorcentagemKeyPressed

    private void btnLimparVendaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimparVendaActionPerformed
        limparGrid(); 
        limpaCamposCliente();
        limpaCamposProduto();
        zerarTotalizadores();
        desabilitaBotoes();
        txtCliente.enable(true);
        txtCliente.requestFocus();
        preencherComboPrestacao();
    }//GEN-LAST:event_btnLimparVendaActionPerformed

    private void btnFinalizarVendaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFinalizarVendaActionPerformed
        vendasTemp = new Venda();
        venda = new Venda();
      
        totalDescontoDinheiroVenda = totalBrutoVenda - totalLiquidoVenda;
        
        totalBrutoVenda = Double.valueOf(String.format(Locale.US, "%.2f", totalBrutoVenda));
        totalLiquidoVenda = Double.valueOf(String.format(Locale.US, "%.2f", totalLiquidoVenda));
        totalDescontoPorcentagemVenda = Double.valueOf(String.format(Locale.US, "%.2f", totalDescontoPorcentagemVenda));
        totalDescontoDinheiroVenda = Double.valueOf(String.format(Locale.US, "%.2f", totalDescontoDinheiroVenda));
                
        vendasTemp.setValorTotalBruto(totalBrutoVenda);
        vendasTemp.setValorTotaLiquido(totalLiquidoVenda);
        vendasTemp.setDescPorcentagem(totalDescontoPorcentagemVenda);
        vendasTemp.setDescDinheiro(totalDescontoDinheiroVenda);
        
        Date date = new Date();  
        vendasTemp.setDtVenda(date);
        
        Bean.copiarVenda(vendasTemp, venda);
        
        venda.setCliente(cliente); //insere o cliente na venda
        persisteVenda.salvar(venda);
        criarPrestacoes();
        
        registrarVendasProdutos();
        baixarEstoque();
        
        limparVenda();
    }//GEN-LAST:event_btnFinalizarVendaActionPerformed

    public void preencherTabela(){
        
        modelo.setNumRows(0); //limpa a tela
    
        for(Object[] item: listaProdutosGrid){
            modelo.addRow(new Object[] {
                item[0], item[1],item[2], item[3],item[4]
            });
        }
 
    }
    
    public void somaProdutos(){
        
        Double somaTotalVenda = 0.00;
       
        for(int i = 0; i < jTableProdutosXVendas.getRowCount(); i++){
            
            String valor = jTableProdutosXVendas.getValueAt(i, 4)+"";  
            
            Double valorVenda = new Double(valor.replace(",", "."));  

            somaTotalVenda = somaTotalVenda + valorVenda;  
            jLabelValorTotalVenda.setText(Validacoes.formatoMoeda.format(somaTotalVenda));
            
            totalLiquidoVenda = somaTotalVenda;
        }
        
        preencherComboPrestacao();
        
    }
    
    public void somaDesconto(){
        Double somadesc = 0.00;
        Double somaBruto = 0.00;
        Double somaLiquido = 0.00;
        String valor;
        String preco;
        String quantidade;

        for(int i = 0; i < jTableProdutosXVendas.getRowCount(); i++){
            
            valor = jTableProdutosXVendas.getValueAt(i, 4).toString();
            preco = jTableProdutosXVendas.getValueAt(i, 1).toString(); 
            quantidade = jTableProdutosXVendas.getValueAt(i, 2).toString();
            
            Double preco2 = Validacoes.validarCampoMoeda(preco);
            
            Double bruto = preco2 * Double.parseDouble(quantidade);
            
            somaLiquido = somaLiquido + Double.parseDouble(valor);            
            somaBruto = somaBruto + bruto;
            
        }
        
        Double valorDesconto = somaBruto - somaLiquido;
            
        String desc;
        desc = String.valueOf((valorDesconto/somaBruto)*100);
        Double ConvDesc = new Double(desc.replace(",", "."));
        
        jLabelValorTotalDescontoVenda.setText(Validacoes.formatoMoeda.format(ConvDesc));
        jLabelValorTotalBrutoVenda.setText(Validacoes.formatoMoeda.format(somaBruto));
        
        totalDescontoPorcentagemVenda = ConvDesc;
        totalBrutoVenda = somaBruto;
    }
    
    public void limparGrid(){

        DefaultTableModel tabela = (DefaultTableModel)jTableProdutosXVendas.getModel();  
        
        while (tabela.getRowCount()> 0){
           modelo.setNumRows(0); 
        } 
        
        listaProdutosGrid.removeAll(listaProdutosGrid);
    }
    
    public void limparVenda(){
        limpaCamposCliente();
        limpaCamposProduto();
        limparGrid();
        desabilitaCampos();
        desabilitaBotoes();
        selecao = 0;
        txtCliente.setEnabled(true);
        txtCliente.requestFocus();
        zerarTotalizadores();
        preencherComboPrestacao();
    }
    
    public void registrarVendasProdutos(){

        int idProduto;
        for(int i = 0; i < jTableProdutosXVendas.getRowCount(); i++){
            produto = new Produto();
            vendProduto = new VendasxProdutos();
            
            totalProdutoBruto = 0.00;
            
            String nomeProduto = jTableProdutosXVendas.getValueAt(i, 0).toString();
            String precoProduto = jTableProdutosXVendas.getValueAt(i, 1).toString();
            String quantProduto = jTableProdutosXVendas.getValueAt(i, 2).toString();
            String descProduto = jTableProdutosXVendas.getValueAt(i, 3).toString();
            String precoLiquido = jTableProdutosXVendas.getValueAt(i, 4).toString();

            totalProdutoBruto = (Double.valueOf(quantProduto) * Validacoes.validarCampoMoeda(precoProduto));
            
            produto.setDescricao(nomeProduto);
            produto = persiteProduto.retornarProdutoPeloNome(produto).get(0);
 
            vendProduto.setQuantidade(Double.valueOf(quantProduto));
            vendProduto.setDesconto(Double.valueOf(descProduto.replace("%","")));
            vendProduto.setPrecoLiquido(Double.valueOf(precoLiquido));
            vendProduto.setPrecoBruto(totalProdutoBruto);
            
            vendProdutoTemp.setProduto(produto);
            vendProdutoTemp.setQuantidade(vendProduto.getQuantidade());
            vendProdutoTemp.setDesconto(vendProduto.getDesconto());
            vendProdutoTemp.setPrecoLiquido(vendProduto.getPrecoLiquido());
            vendProdutoTemp.setPrecoBruto(vendProduto.getPrecoBruto());
            vendProdutoTemp.setVenda(venda);
            
            Bean.copiarVendaProdutos(vendProdutoTemp, vendProduto);
        
            persisteVendasxProdutos.salvar(vendProduto);
            
        }
        
    }
    
    public void baixarEstoque(){
        int idProduto;
        int Estoque;
        int EstoqueNovo;
                
         for(int i = 0; i < jTableProdutosXVendas.getRowCount(); i++){
            produto = new Produto();
            produtoTemp = new Produto();
            
            String nomeProduto = jTableProdutosXVendas.getValueAt(i, 0)+"";
            int quantProduto = Integer.valueOf(jTableProdutosXVendas.getValueAt(i, 2)+"");
            
            produto.setDescricao(nomeProduto);
            
            produto = persiteProduto.retornarProdutoPeloNome(produto).get ( 0 ); //pega o produto com esse nome
            produto.setEstoque(produto.getEstoque() - quantProduto);
            
            
            persiteProduto.atualizar(produto);
        }
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnFinalizarVenda;
    private javax.swing.JButton btnLimparVenda;
    private javax.swing.JComboBox jComboFormaPagamento;
    private com.toedter.calendar.JDateChooser jDDataPagamento;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabelCPF;
    private javax.swing.JLabel jLabelCliente;
    private javax.swing.JLabel jLabelDesconto;
    private javax.swing.JLabel jLabelDescontoDinheiro;
    private javax.swing.JLabel jLabelDescontoPorcentagem;
    private javax.swing.JLabel jLabelPreco;
    private javax.swing.JLabel jLabelPrecoTotalProduto;
    private javax.swing.JLabel jLabelProduto;
    private javax.swing.JLabel jLabelQuantidade;
    private javax.swing.JLabel jLabelTotalBrutoVenda;
    private javax.swing.JLabel jLabelTotalDescontoVenda;
    private javax.swing.JLabel jLabelTotalVenda;
    private javax.swing.JLabel jLabelValorTotalBrutoVenda;
    private javax.swing.JLabel jLabelValorTotalDescontoVenda;
    private javax.swing.JLabel jLabelValorTotalVenda;
    private javax.swing.JPanel jPanelCliente;
    private javax.swing.JPanel jPanelPrincipal;
    private javax.swing.JPanel jPanelProduto;
    private javax.swing.JPanel jPanelTotalizadores;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTableProdutosXVendas;
    private javax.swing.JFormattedTextField txtCPF;
    private javax.swing.JTextField txtCliente;
    private javax.swing.JTextField txtDescontoDinheiro;
    private javax.swing.JTextField txtDescontoPorcentagem;
    private javax.swing.JTextField txtPreco;
    private javax.swing.JTextField txtPrecoTotal;
    private javax.swing.JTextField txtProduto;
    private javax.swing.JTextField txtQuantidade;
    // End of variables declaration//GEN-END:variables
}
